10 - 2.2.2 C-Kurzeinführung: Preprozessor [ID:14151]
50 von 96 angezeigt

So in diesem Abschnitt möchte ich jetzt nur sehr kurz auf den C-Präprozessor eingehen,

auf zwei wichtige Elemente, die einem der C-Präprozessor zur Verfügung stellt.

Dieser Präprozessor ist in Zusammenhang mit der Programmiersprache C durchaus eine Besonderheit

und seine Entwicklung muss man sicherlich ein Stück weit vor dem historischen Hintergrund auch

von C sehen. So vor 50 Jahren, als die Programmiersprache C so um 1970 rum entwickelt

wurde, war natürlich die Leistungsfähigkeit der Rechner und damit auch die Möglichkeit,

was man alles in einem Compiler machen konnte, durchaus eingeschränkt. Und mit diesem Problem

ist man so umgegangen, dass man Compiler einfach in mehrere Phasen zerlegt hat,

in mehrere sogenannte Pässe und so hat der Compiler dann eben Schritt für Schritt aus so einem

Programm-Quellcode dann das ausführbare Programm erzeugt. Und letztendlich ist dieser C-Präprozessor

nichts anderes wie so ein vorgelageter, eine vorgelagerte Phase des Compilers, in der die

C-Quelldatei einfach mal so ein Stück vorverarbeitet wird. Es werden zum Beispiel die Kommentare

rausgeworfen. Man kann Inhalte anderer Dateien einfügen oder man kann auch einfach so Passagen

beschreiben, die nur abhängig von irgendeiner Voreinstellung übersetzt werden sollen, weil sie

zum Beispiel speziellen Code enthalten, der abhängig von einem bestimmten Prozessortyp ist

oder von einer bestimmten Betriebssystemversion. Und auf die Weise kann man dann eben einstellen,

was jetzt wirklich bei einer konkreten Übersetzung am Ende an Programm-Code wirklich genommen wird

und was übersetzt wird und was vielleicht auch weggelassen wird. Und man kann damit letztendlich

so eine Art Konstanten definieren. In der Anfangsphase hatte C keine Konstanten, das was wir im

Kapitel über Variablen und Datentypen kennengelernt haben, diese Definition auch von Konstanten. Das

gab es in der ursprünglichen C-Version um 1970 noch nicht. Und wenn man jetzt in dem Programm

irgendwelche Werte hat, zum Beispiel die Größe von irgendeinem Eingabepuffer oder sowas, wo man

sagen möchte, der soll 1024 Zeilen groß sein und dann hat man eine Schleife, die über diesen Puffer

läuft und die muss natürlich dann von 0 bis 1023 laufen. Und man hat vielleicht auch ein paar

andere Stellen, wo man diese Puffergröße braucht. Dann ist es natürlich gut, wenn man diese Puffergröße

an einer Stelle hinschreiben kann und an allen Stellen, wo diese Puffergröße dann benötigt wird,

kann man also dann die so vordefinierte Konstante einfach einsetzen. Und wenn man dann was dran

ändern möchte, hat man eine Stelle, an der man das ändert. Und auch dafür hat eben dieser

Präprozessor Mechanismen. Der Präprozessor ist eigentlich völlig unabhängig vom Rest der

Programmiersprache C und Anweisungen an den Präprozessor werden dadurch gekennzeichnet,

dass man am Anfang der Zeile so ein Garten-Sound-Zeichen, also ein Hash-Symbol setzt.

Dann weiß eben der Präprozessor, dass diese Zeile für ihn ist und er bearbeitet sie und der

C-Compiler, der dann hinterher das Ergebnis dieser Vorverarbeitung bekommt, der sieht diese Zeilen

dann gar nicht mehr, weil der Präprozessor die in dem Zusammenhang dann auch gleich rausmacht.

Die Syntax ist unabhängig vom Rest der Sprache. Es gibt, wir werden das jetzt im Moment noch nicht

betrachten, aber im Rahmen der Übungen kommt das dann irgendwann auch mit dran. Es gibt

darin im Präprozessor auch IF-Anweisungen zum Beispiel, wo man abhängig von irgendeinem Wert

dann irgendwelche Zeilen an den Compiler übergibt oder eben nicht. Aber auch diese Syntax-Fundos,

so eine IF-Anweisung für Präprozessor ist also völlig anders wie ein IF in der Programmiersprache

C. Das ist also eigentlich eine eigene Programmiersprache im Kontext von C-Programmen.

Insbesondere werden auch die Präprozessor-Anweisungen nicht durch ein Semikolon abgeschlossen.

Wir schauen uns jetzt einfach mal zwei wichtige Funktionen an. Das erste ist die Definition von

Macros, das ist das Define und das andere ist das Einfügen von Dateien in eine Datei. Das ist das

Include. Macros ermöglichen einfache textuelle Ersetzungen. Also ist im Prinzip so ein bisschen

was ähnliches wie Konstante, aber ist es mehr, weil man kann das also nicht nur für Werte machen,

sondern man kann das auch für irgendwelche Programmpassagen machen. Also es ist letztendlich

einfach eine textuelle Ersetzung. Und so ein Macro wird durch diese Define-Anweisung definiert

und die Syntax ist am Ende dann einfach so, ich schreibe hier ein Define, dann den Namen eines

Macros und ein Ersatztext. Und diese Makro-Definition bewirkt letztendlich nichts anderes,

als dass der Präprozessor im nachfolgenden Text, der C-Quelle, alle Vorkommen dieses

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:09:54 Min

Aufnahmedatum

2020-04-25

Hochgeladen am

2020-04-25 13:16:11

Sprache

de-DE

Tags

Preprozessor
Einbetten
Wordpress FAU Plugin
iFrame
Teilen